草庐IT

c++ - RAII 和 C++ STL

全部标签

c++ - 为什么这些 C++ STL 无序集不被视为相等?

我希望下面的两个无序集合被评估为等价的,但令我惊讶的是它们不是。发生这种情况是因为这两个字符串存储在同一个哈希桶中,并且运算符==对集合中的项目进行顺序比较。这应该被认为是std::unordered_set中的错误吗?有人对此有优雅的解决方法吗?std::unordered_seta,b;a.insert("500666");a.insert("961021");b.insert("961021");b.insert("500666");if(a==b)//conditionisevaulatedasfalse{} 最佳答案 这是

c++ - 使用 Xcode 4.5 调试 c++ 时,单步执行代码会停止在 STL 代码上

我尝试用Xcode4.5调试C++代码,用llvm4.1编译。代码非常简单,只是将几个项目插入到map中。当我跨过STL函数时,执行在STL代码内部停止,而不是像往常一样执行该步骤。当我使用LLVM-GCC4.2进行编译时,调试正常,但此编译器不支持C++11。有没有人遇到过这个问题,知道能不能解决? 最佳答案 自从LLDB被引入Xcode以来,我肯定会遇到同样的问题。它似乎没有正确处理跨内联函数(参见:DebuggerstepsdeeperwhentryingtostepoutofC++11stdlib)。我刚刚向Apple(ID

c++ - STL 容器的范围插入函数在 c++11 下返回 void?

刚刚学习c++,所以我可能没有正确理解这一点,但我只读到范围插入函数返回新标准下的迭代器(C++Primer5thEd,cplusplus.com,cppreference.com,以及各种建议使用它来维护迭代器有效性的答案)。来自cppreference.com:templateiteratorinsert(const_iteratorpos,InputItfirst,InputItlast);但是,我尝试过的每个版本的CygwinGCC和MinGW都使用-std=c++11返回了void。即使查看header,它似乎就是这样写的,而且我无法修改任何内容来修复它。我错过了什么?这是我

c++ - STL find_if 和不区分大小写的字符串比较

我有一个Models的vector,如下所示:structModel{std::stringmName;//.......};给定一个表示模型名称的字符串,我想看看是否可以在vector中找到其中一个模型。现在我有这个:std::stringassetName="monkey";std::vector::iteratoriter=std::find_if(mModels.begin(),mModels.end(),boost::bind(&Model::mName,_1)==assetName);但是这不会进行不区分大小写的字符串比较。所以我阅读了有关boost/algorithm/s

c++ - 最佳 STL 转换——类似三元运算符的模板函数

STL定义了两种类型的transform功能第一个是对于一元运算符:templateOutputIteratortransform(InputIteratorfirst1,InputIteratorlast1,OutputIteratorresult,UnaryOperationop);第二个是二元运算符:templateOutputIteratortransform(InputIterator1first1,InputIterator1last1,InputIterator2first2,OutputIteratorresult,BinaryOperationbinary_op);三

c++ - 具有反向和 pop/push_back 成本的 STL vector

我不太擅长计算算法成本,所以我想问一下。这是一个初始化为1000个元素的vector:vectormFreeIndexes(1000);我会连续pop_back/push_back元素到vector,但push_back永远不会超过1000(所以永远不要强制vector重新分配)。在这种情况下,pop_back/push_back操作是O(1)还是O(n)? 最佳答案 来自C++标准23.3.7.5:voidpush_back(constT&x);voidpush_back(T&&x);Remarks:Causesreallocat

c++ - 带有自定义分配器的 const T 的 STL 容器是否格式错误?

采用以下代码片段:#includestd::vectorgood;//illegal,becausestd::allocatorisill-formedstd::vectorbad;//failstocompileunderMSVS2017std::vectorX;为什么X编译失败?MSVS2017展会ErrorC2338(failedstaticassert):TheC++Standardforbidscontainersofconstelementsbecauseallocatorisill-formed.据我了解,这不一定是正确的。根据20.5.3.5[allocator.req

符合 C++ STL 的分配器

在处理小对象时,有哪些分配器可用于STL。我已经尝试过使用Boost的池分配器,但没有得到任何性能提升(实际上,在某些情况下性能下降相当大)。 最佳答案 你没有说你使用的是什么编译器,但它可能带有一堆预构建的分配器。这是在带有gcc4.2.1的Mac上:~$find/usr/include/c++/4.2.1/-name"*allocator*"/usr/include/c++/4.2.1/bits/allocator.h/usr/include/c++/4.2.1/ext/array_allocator.h/usr/include

c++ - STL - 以下代码的问题是什么?

#include"stdafx.h"#include#includeusingnamespacestd;classNiftyEmailProgram{private:typedefmapNicknameMap;NicknameMapnicknames;public:voidShowEmailAddress(conststring&nickname)const{NicknameMap::const_iteratori=nicknames.find(nickname);if(i!=nicknames.end()){}}};intmain(intargc,char*argv[]){print

用于数组、 vector 、内置类型、STL 的 C++ 模板函数

我想创建一个类,该类具有将发送给它的数据保存到文本文件的功能。可以传递给它的数据可以是std::string之类的任何东西。,int,double,float,unsignedint等,也可以是:std::vector,T[],和std::vector>,T[][].现在,很明显,如果它是一个数组,我将需要遍历它以将数据发送到文本文件。我在考虑使用模板,但我不确定如何使用数组。这是要走的路吗?classCMyClass{templatevoidSaveData(Tdata);voidSaveData(std::vectordata);voidSaveData(std::stringda